package ipdesk.model.report.consult.dao;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;

import ipdesk.model.businessInfo.bean.BusinessInfoBean;
import ipdesk.model.report.consult.bean.ConsultInfoBean;

import com.ibatis.dao.client.DaoManager;
import com.ibatis.dao.client.template.SqlMapDaoTemplate;
import com.opensymphony.xwork2.ActionContext;

import ecg.util.SessionUtils;
import ecg.util.SqlMapLocator;

public class ConsultInfoImpl extends SqlMapDaoTemplate implements IConsultInfo
{
	public ConsultInfoImpl(DaoManager manager)
	{
		super(manager);
	}
	
	public int consultInfoReg(ConsultInfoBean consultInfoBean) throws Exception
	{
		int consultCodeCount = 0;
		String consultCode = "";
		int lastConsultingSeq = 0;
		
		
		
		String consultingTime = consultInfoBean.getConsultingDate();
		String deskCode = consultInfoBean.getDeskCode();
		System.out.println("****deskCode : " + deskCode);
		
		// 기업코드를 생성하기 위해 등록날짜와 데스크 코드를 조건으로 한 데이터의 갯수를 가지고온다.
		consultCodeCount = ((Integer)this.queryForObject("consult.consultCode-count", consultInfoBean)).intValue();
				
		String endNumber = StringUtils.leftPad(Integer.toString(consultCodeCount+1), 4, "0");
		
		// 생성된 상표출원일지 관리코드.
		if(deskCode != null | !deskCode.equals("")){
			consultCode = consultingTime.replaceAll("-","") + "-" + deskCode.substring(4) + "-IPR-" + endNumber;
		}else if(deskCode == null | deskCode.equals("")){
			consultCode = consultingTime.replaceAll("-","") + "-000-IPR-" + endNumber;
		}
		
		// 생성된 기업관리코드 빈 객체에 저장.
		consultInfoBean.setManageNo(consultCode);
		consultInfoBean.setUserSeq(Integer.parseInt(SessionUtils.getLoginSession().get("userSeq")));
		
		// iBatis 연동. 데이터 insert.
		lastConsultingSeq = ((Integer)this.insert("consult.consultInfoInsert", consultInfoBean)).intValue();
					
		
		
		return lastConsultingSeq;
	}
	
	public void insertFileData(ConsultInfoBean consultInfoBean)
	{
		// iBatis 연동. 데이터 insert.
		this.insert("consult.consultFileInfoInsert", consultInfoBean);
	}
	
	/**
	 *  전체 데이터 갯수를 가져오는 메서드.
	 */
	public int getDataTotalCount(ConsultInfoBean consultInfoBean) throws Exception
	{
		Map map = new HashMap();
		String authCode = SessionUtils.getLoginSession().get("authCode");
		map.put("userSeq", SessionUtils.getLoginSession().get("userSeq"));
		map.put("authCode", authCode);
		map.put("orgCode", SessionUtils.getLoginSession().get("orgCode"));
		map.put("deskCode", consultInfoBean.getDeskCode());
		
		if((consultInfoBean.getSearchKeyword()) != null && (!consultInfoBean.getSearchKeyword().equals("")))
		{
			map.put("searchOption", consultInfoBean.getSearchOption());
			map.put("searchKeyword", consultInfoBean.getSearchKeyword());
		}
		System.out.println("year : " + consultInfoBean.getYear());
		//if(consultInfoBean.getYear() != null && !consultInfoBean.getYear().endsWith("")) {
		if(consultInfoBean.getYear() != null || !"".equals(consultInfoBean.getYear())) {
			map.put("year", consultInfoBean.getYear());
		}
		
		/*if(map.get("deskCode") == null || map.get("deskCode").equals(""))
		{
			
			// 통합관리자와 소속 관리자가 아닌 지역 컨설턴트일경우에는 세션에 있는 deskCode를 맵에 저장한다.
			//if(!authCode.equals("ADMIN") && !authCode.equals("ADMIN_ORG"))
			//{
				map.put("deskCode", SessionUtils.getLoginSession().get("deskCode"));
			//}
		}*/
		
		int totalDataCount = ((Integer)this.queryForObject("consult.consultInfoTotalcount", map)).intValue();
		
		return totalDataCount;
	}
	
	/**
	 * 센터별 전체 데이터를 가져오는 메서드.
	 * 
	 */
	public List<ConsultInfoBean> getPagingDataList(Map map) throws Exception
	{
		String authCode = SessionUtils.getLoginSession().get("authCode");
		map.put("userSeq", SessionUtils.getLoginSession().get("userSeq"));
		map.put("authCode", authCode);
		map.put("orgCode", SessionUtils.getLoginSession().get("orgCode"));
		
		if(!map.containsKey("deskCode"))
		{
			
			// 통합관리자와 소속 관리자가 아닌 지역 컨설턴트일경우에는 세션에 있는 deskCode를 맵에 저장한다.
			if(!authCode.equals("ADMIN") && !authCode.equals("ADMIN_ORG"))
			{
				map.put("deskCode", SessionUtils.getLoginSession().get("deskCode"));
			}
		}
		
		
		List<ConsultInfoBean> pageDataList = this.queryForList("consult.consultPageDataList", map);
		
		return pageDataList;
	}
	
	/**
	 *  해당 consultSeq의 하나의 로우 데이터를 가지고온다.
	 *  
	 */
	public ConsultInfoBean getDataOneRow(int consultSeq, String queryId)
	{
		ConsultInfoBean consultInfoBean = (ConsultInfoBean)this.queryForObject(queryId, consultSeq);
		
		return consultInfoBean;
	}
	
	/**
	 * 해당 consultSeq의 하나의 로우를 삭제한다.
	 */
	public void deleteDataOneRow(int consultSeq,  String queryId)
	{
		this.delete(queryId, consultSeq);
	}

	/**
	 * 해당 consultSeq의 하나의 로우를 업데이트 한다.
	 * @param consultInfoBean
	 * @param queryId
	 * @return
	 */
	public int consultInfoUpdate(ConsultInfoBean consultInfoBean, String queryId)
	{
		int result = this.update(queryId, consultInfoBean);
		
		return result;
	}

	public void deleteFileData(int consultSeq, String queryId)
	{
		// TODO Auto-generated method stub
		this.delete(queryId, consultSeq);
	}
}
